package com.atguigu.common.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * 自定义注解 来校验
 */
@Documented
// 最重要的 校验注解是使用哪个校验器来校验  这里不指定，就要在初始化的时候指定
@Constraint(
        validatedBy = {ListValueConstraintValidator.class} //指定自定义的校验规则
)
//@Target：注解可以标注在那些地方，比如方法，字段，参数，构造器等等
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME) //校验注解可以在运行的时候获取
public @interface ListValue {
    //必须拥有的三个属性1、校验出错，错误信息去哪取；2、支持分组校验的功能；3、能自定义一些负载信息

    String message() default "{com.atguigu.common.valid.ListValue.message}"; //1

    Class<?>[] groups() default {}; //2

    Class<? extends Payload>[] payload() default {};    //3

    int[] vals() default {};
}
